class Test {
    public int a;
    public static String name;

    // 1. 普调代码块
    {

    }

    // 2. 构造代码块，用于初始化成员变量
    {
        a = 10;
    }

    // 3. 静态代码块(最先执行的)，只要这个类被加载，就会被执行，不管是不是实例化对象
    // 静态代码块只执行1次
    static {

    }


    // 构造函数在 代码块 执行后才会执行，是最后执行的
    public Test(int a) {
        this.a = a;
    }
}

class Student {
    static String name = "xupeng";
    int age = 0;

    public Student(int age) {
        this.age = age;
    }

    // 对于静态成员的Set和Get方法，最好也是static的
    public static String getName() {
        return name;
    }

    // 静态成员函数初始化：
    // 1. 定义时初始化
    // 2. 默认初始化 / 使用初始化函数初始化
    // 3. 通过 代码块 进行赋值
}

public class Class5_static {
    public static void main(String[] args) {
        Student s1 = new Student(1);
        System.out.println(Student.name);      // static 静态成员变量使用 <类名>.<成员名> 的方法访问

        Student s2 = null;
        System.out.println(s2.name);       // 即使这个对象的引用是null，但是不会出错


    }
}
